
import Vue from 'vue'
import router from './router'
import store from './store'
import axios from 'axios'
import VueAxios from 'vue-axios'//vue 得axios插件 把axios挂载到vue实例上 避免每次使用axios都要重复调用
import App from './App.vue'
import VueLazyload from 'vue-lazyload'
import VueCookie from 'vue-cookie'
import { Message } from "element-ui";
import 'element-ui/lib/theme-chalk/index.css';
// import env from './env.js'

// 插件mockjs模拟数据
const mock=false 
// 模拟数据开关
if(mock){
  require('./mock/api.js') 
  // 类似import 区别在于需要得是被加载 不需要得不被加载
}





// 配置请求的基准URL地址
//根据前端得跨域方式做调整
// 如果是jsonp就要是完整ip地址 这里api是因为vue configjs里设置了 接口代理得跨域
axios.defaults.baseURL = '/api';
// 设置超时
axios.defaults.timeout=8000;
// axios.defaults.baseURL = env.baseURL; 根据环境变量获取不同的请求地址 

// 接口错误拦截 敲重点
//axios设置响应拦截器 
//服务器返回结果得时候 进行拦截，然后对数据进行处理 详情见npm 官网axios文档
axios.interceptors.response.use(response => {
  let res = response.data 
  let path=location.hash
  //axios封装得技术 通过response.data直接拿到返回得值
  /**
   * json得形式
   * statu:0 请求成功
   * data:‘数据’
   * msg‘返回信息’
   */
  if(res.status==0){
    return res.data //接口返回得值
  }else if(res.status == 10){
    if(path!='#/index'){
      window.location.href='/#/login';
    }
    return Promise.reject(res)
    // 自定义未登录状态码为10 看服务器接口
    // 未登录得时候通过原生js直接跳转到登录页面
  }else{
    Message.warning(res.msg)
    return Promise.reject(res)

  }
}, err => {
  let res=err.response
  Message.warning(res.data.message)
  return Promise.error(err)
  
})








//把axios注册到Vue
Vue.prototype.$http = axios
//关闭vue在console中的默认提示
Vue.config.productionTip = false



Vue.use(VueAxios,axios) //使用插件 注册vueaxios 将axios挂在到vue实例上的语法
Vue.use(VueLazyload,{
  loading:'/imgs/loading-svg/loading-bars.svg'
}) // 图片懒加载插件详情请见npm文档
Vue.use(VueCookie) //本地存储因为vue是单页面框架，刷新后数据会丢失
Vue.use(Message)
Vue.prototype.$message = Message;
Vue.config.productionTip = false
// cors跨域后端解决，前端直接访问通过axios直接调用接口
// jsonp跨域 实际是通过js脚本来获取数据而不是直接请求 通过安装jsonp插件 然后通过方法 jsonp('url',(err：错误信息,res：参数结果)=>{回调函数})
// 接口代理,vue.config.js 里配置webpackge的数据信息 其本质是，仿佛访问自己本地的接口，通过node js对访问的接口进行拦截，底层转发为实际访问的接口 具体配置在vue.config.js里
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
